Text Editor

Vim
Vi 는 원래 유닉스 시스템에서 사용되었던 편집기로 텍스트 편집 창을 모방한 콘솔 그래픽 모드를 사용한다.
GNU 프로젝트에서 오픈소스로 vi 편집기를 이식할 때, 몇 가지를 개성하였고 이를 vi(vi Improved) or vim이라고 불렀다.
alias vi="vim"
CentOS 배포판은 vi를 vim 별칭으로 사용한다.
Ubuntu 배포판은 /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny 를 소프트 링크하고 있다.
Kali Linux 배포판은 /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.basic 를 소프트 링크하고 있다.

위의 vim.tiny, vim.basicdms vim 편집기의 기능 중 일부만을 제공한다.
vim file.cpp
vim 편집기는 메모리 버퍼의 데이터와 함께 동작한다.
(기존 파일을 지정하지 않거나 새로운 파일일 경우 새로운 버퍼 영역을 연다.)

- 일반 모드: 키 입력을 명령으로 해석
- 삽입 모드: 입력한 모든 키를 버퍼의 현재 커서 위치에 삽입

최근 vim은 키보드 화살표 키를 텍스트 커서 이동으로 정의해 두었지만, 일부 vim은 정의되어 있지 않다.

/<word>    # word 검색
:s/old/new    # old 문자를 new로 대체
:s/old/new/g    # 한줄에서 모든 old를 new로 대체
:n,ms/old/new/g    # n~m 줄 사이의 모든 old를 new로 대체
:%s/old/new/g    # 전체 파일에서 나타나는 old를 new로 대체
:%s/old/new/gc    # 한줄에서 나타나는 old를 new로 대체하지만, 대체할 때 마다 확인(check)
nano
nano는 유닉스의 pico 편집기와 유사하게 매우 가벼운 텍스트 에디터이다.
(pico는 GPL 라이선스가 적용되지 않지만, nano는 GPL 라이선스가 적용되며 GNU project에 포함됨)
emacs
emacs는 유닉스가 등장하기 전부터 인기 있던 텍스트 에디터로 콘솔 모드와 그래픽 모드 둘다 지원한다.
emacs 콘솔 모드는 많은 명령키 조합을 사용한다.
일반적으로 컨트롤 키(Ctrl)와 메타키(Alt)로 매핑된다.
C-<key> | M-<key>

일반 모드와 편집 모드를 변환해면서 문서를 편집하는 vim과 달리 emacs는 한가지 모드만이 존재한다.
화살표를 사용하거나
C-p: 위
C-b: 왼
C-f: 오른
C-n: 아래
C-a: 현재 줄 처음
C-e: 현재 줄 끝

C-x, C-s: 현재 버퍼의 내용을 파일에 저장
C-z: emacs를 종료하나 세션에서 실행 상태를 유지
C-x C-c: emacs를 종료하고 프로그램을 중지

emacs에서 텍스트를 삭제하는 것은 영구적인 삭제를 의미하고,
텍스트를 죽이는 것은 이 후 붙여 넣기 하기 위한 임시 영역에 저장함을 의미한다.

M-<BACK SPACE>: 현재 커서 위치 이전의 단어 죽임
M-d: 현재 커서 위치 이후에 있는 단어 죽임
C-k: 현재 커서 위치에서 줄 끝까지 죽임
M-k: 현재 커서 위치에서 문장 마지막까지의 텍스트를 죽임

C-@(or C-<SPACE>)에서 C-w까지 죽임(C-/: 죽이기 관련 명령 실행 취소 and UNDO)

C-y: 죽였던 텍스트 붙여넣기(M-y는 순환해서 붙여넣기를 허용함)
(잘라내지 않고 복사할 경우, 원본 텍스트를 죽이고 M-y로 붙여넣기함)

C-s: 순방향 검색
C-r: 역방향 검색
(증분 검색, 비증분 검색)

M-x: 기존의 텍스트 문자열을 새 텍스트 문자열로 대체

C-x 2: 창 수평 분할
C-x 3: 창 수직 분할
C-x o: 다음 창으로 이동
C-x 0: 현재 창 닫기
C-x 1 현재 있는 창 외의 모든 창 닫기
KDE family Text Editor
KWrite: 단일 화면 텍스트 편집 패키지
Kate: 완벽한 기능을 가진 멀티 윈도우 텍스트 편집 패키지
kwrite <script>
--stdin KWrite: 표준 입력 장치로 부터 데이터를 읽어 들임
--encoding: 파일에 사용하는 파일 인코딩 형식을 지정
--line: 편집기 파일의 줄 번호를 지정
--column: 편집기 파일의 열 번호를 지정

kate는 kwrite보다 많은 기능을 포함하고 있는 편집기
GNOME family Text Editor
gedit